package cn.tedu._05mvcboot.controller;

import cn.tedu._05mvcboot.pojo.dto.RegisterDTO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

/**
 * 用户模块的请求处理
 * @Controller 注解
 * 将此类标识为一个控制器的类
 * 此类中的方法，可以处理请求，返回响应
 *
 * @RequestMapping("路径") 注解
 * 将此方法标识为一个请求处理方法
 * 标注在方法上，表示此方法可以处理请求
 *
 * @ResponseBody 注解
 * 允许控制器方法以返回值的形式返回给客户端数据
 *
 * 1、Get请求，下面的方法全是基于Get请求
 *
 */


@Controller
public class UserController {

    @RequestMapping("/v1/users/login")
    @ResponseBody
    public String login(){
        return "恭喜你，登录成功";
    }

    /* 注册功能
    第一种方法：通过HttpServletRequest对象获取请求参数
    一般不用
     */

    @RequestMapping("/v1/users/register")
    @ResponseBody
    public List<String> register(HttpServletRequest request){
        ArrayList<String> list = new ArrayList<>();
        // request.getParameter("参数名")  获取请求头传递过来的参数
        // 获取请求头中的参数
        list.add(request.getParameter("username"));
        list.add(request.getParameter("password"));
        list.add(request.getParameter("nickname"));
        return list;
    }

    /*
    第二种方法获取请求头传递过来的参数
    通过声明参数的方法接收参数
    适合参数比较少的情况
    http://localhost:8080/v1/users/register1?username=宋雨琦&password=1999923&nickname=宋小狗
     */
    @RequestMapping("/v1/users/register1")
    @ResponseBody
    public String register1(String username,String password,String nickname){

        return username+"-"+password+"-"+nickname;

    }

    /*
    第三种方法 DTO对象接收参数·
    创建RegisterDTO类
    适合参数比较多的情况，其次复用性比较高，其他类或者方法也可以使用
    http://localhost:8080/v1/users/register1?username=宋雨琦&password=20011206&nickname=宋小狗
     */
    @RequestMapping("/v1/users/register2")
    @ResponseBody
    public String register2(RegisterDTO registerDTO){

        return registerDTO.getUsername()+"-"+registerDTO.getPassword()+"-"+registerDTO.getNickname();

    }

}
